package com.example.demo.controller;

import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;

import org.springframework.beans.propertyeditors.CustomDateEditor;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.ServletRequestDataBinder;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.InitBinder;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.example.demo.entity.Person;
import com.example.demo.entity.User;

@Controller
public class HelloController {

	/**
	 * 访问路径：http://192.168.4.104:9999/root/hello
	 * @return
	 */
	@RequestMapping("/hello")
	public @ResponseBody String hello() {
		if(1==1)
			throw new RuntimeException("出现一个错误");
		return "<h1>这是我的第一个页面</h1>";
	}
	/**
	 * 参数注入，会将parameter中的参数自动注入进来
	 * 
	 * @param name
	 * @param age
	 * @return 会自动跳转到hello这个地址，如果没有这个视图的化
	 */
    @RequestMapping("/person")
    public String toPerson(String name,Double age){
        System.out.println(name+" :"+age);
        return "hello";
    }
    
    /**
     * 将Person的信息注入到实体类中
     * @param p
     * @return
     */
    @RequestMapping("/perobj")
    @ResponseBody
    public String getPersonForObj(Person p) {
    	return "您输入的信息是："+p.toString();
    }
    
  
    /**
     * 获取日期类型的参数
     * @param date
     * @return
     */
    @RequestMapping("/date")
    public String date(Date date){
        System.out.println(date);
        return "hello";
    }
    
    /**
     * 将String类型转换成为Date类型，将调用格式化器的parse方法
     * @param binder
     */
    @InitBinder
    public void initBinder(ServletRequestDataBinder binder){
        binder.registerCustomEditor(Date.class, new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd"),
                true));
    }
    
  
    /**
     * 将参数注入request作用域中
     * spring-boot默认视图thymeleaf个人非常憎恶这个视图
     * 请记住，别去严格要求你的客户，让那些严格要求客户的产品都跟着xml一起去消亡吧
     * @param map
     * @return
     */
    @RequestMapping("/show")
    public String showPerson(Map<String,Object> map){
        Person p =new Person();
        map.put("p", p);
        p.setAge(20.0);
        p.setName("jayjay");
        return "show";
    }
    
  
    /**
     * 注入输出流
     * @param name
     * @param pw
     */
    @RequestMapping("/getPerson")
    public void getPerson(String name,PrintWriter pw){
        pw.write("hello,"+name);        
    }
    
    @RequestMapping("/name")
    public String sayHello(){
        return "index";
    }
    /**
     * http://localhost:9999/root/s2u?user=章三::18::男
     * @param user
     * @return
     */
    @GetMapping("s2u")
    @ResponseBody
    public Object string2User(User user) {
    	return user;
    }
    
}
